// 节点接口

package api

import (
    "os"
    "fmt"
    "net"

    "net/http"
    "io/ioutil"
    "encoding/json"

    "tokyo/common"
)


// 接收系统出的题目
func GetQuestion(w http.ResponseWriter, r *http.Request)  {
    // 获取调用方法和内容类型
    requestMethod := r.Method
    contentType := r.Header.Get("Content-Type")

    // 只响应POST方法，JSON格式
    if (requestMethod == "POST" && contentType == "application/json") {
        // 获取题目
        b, _ := ioutil.ReadAll(r.Body)

        // 反序列化
        var question common.Question
        json.Unmarshal(b, &question)
        fmt.Println("收到题目：", question.DarkText)
        fmt.Println("题目编号：", question.Seq)

        // 异步破解密文
        go BreakDark(question)

        // 返回一个调用成功状态
        fmt.Fprintf(w, "success")
    } else {
        // 返回一个调用失败状态
        fmt.Fprintf(w, "failed")
    }
}

// 获取考试结果
func GetResult(w http.ResponseWriter, r *http.Request)  {
    // 获取调用方法
    method := r.Method

    // 获取内容类型
    contentType := r.Header.Get("Content-Type")

    // 只响应post-json
    if (method == "POST" && contentType == "application/json") {
        // 获取请求体
        b, _ := ioutil.ReadAll(r.Body)

        // 反序列化
        var testRes common.TestResult
        json.Unmarshal(b, &testRes)

        // 获取自身IP
        hostName, _ := os.Hostname()
        nslookup, _ := net.LookupHost(hostName)
        myIp := nslookup[0]

        // 判断：作者是本人
        go IfAuthor(testRes, myIp)

        // 返回一个调用成功状态
        fmt.Fprintf(w, "success")
    } else {
        // 返回一个调用失败状态
        fmt.Fprintf(w, "failed")
    }
}
